{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 知识阶段性总结（知识考查）\n",
    "\n",
    "* 本周主要内容：高德API\n",
    "* 20春_API_人工智能与机器学习_week05\n",
    "*  电子讲义设计者：许智超，廖汉腾\n",
    "<br/>\n",
    "<br/>\n",
    "\n",
    "## 上周回顾：\n",
    "1. 地图API简介（Web服务）\n",
    "2. 如何选择合适的API（开发支持）\n",
    "3. 权衡经济成本和产品设计成本（调用量和并发量思考，经济成本考量）\n",
    "4. 设计地图url需求\n",
    "5. 测试API功能\n",
    "    1. 地理编码/逆地理编码\n",
    "    2. 路径规划\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "----\n",
    "\n",
    "\n",
    "<br/>\n",
    "<br/>\n",
    "\n",
    "# 细读地图API（高德）\n",
    "\n",
    "\n",
    "\n",
    "## 本周内容介绍\n",
    "\n",
    "* 关键：如何详细阅读和使用API参数\n",
    "    1. 回顾地理编码、逆地理编码、步行路径规划\n",
    "    2. 路径规划2\n",
    "    3. 搜索POI\n",
    "    4. IP定位\n",
    "    5. 批量请求借口\n",
    "    6. 静态地图\n",
    "    7. 坐标转换 \n",
    "    8. 交通态势\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "/* 本电子讲义使用之CSS */\n",
       "div.code_cell {\n",
       "    background-color: #e5f1fe;\n",
       "}\n",
       "div.cell.selected {\n",
       "    background-color: #effee2;\n",
       "    font-size: 2rem;\n",
       "    line-height: 2.4rem;\n",
       "}\n",
       "div.cell.selected .rendered_html table {\n",
       "    font-size: 2rem !important;\n",
       "    line-height: 2.4rem !important;\n",
       "}\n",
       ".rendered_html pre code {\n",
       "    background-color: #C4E4ff;   \n",
       "    padding: 2px 25px;\n",
       "}\n",
       ".rendered_html pre {\n",
       "    background-color: #99c9ff;\n",
       "}\n",
       "div.code_cell .CodeMirror {\n",
       "    font-size: 2rem !important;\n",
       "    line-height: 2.4rem !important;\n",
       "}\n",
       ".rendered_html img, .rendered_html svg {\n",
       "    max-width: 100%;\n",
       "    height: auto;\n",
       "    float: center;\n",
       "}\n",
       "/* Gradient transparent - color - transparent */\n",
       "hr {\n",
       "    border: 0;\n",
       "    border-bottom: 1px dashed #ccc;\n",
       "}\n",
       ".emoticon{\n",
       "    font-size: 5rem;\n",
       "    line-height: 4.4rem;\n",
       "    text-align: center;\n",
       "    vertical-align: middle;\n",
       "}\n",
       "\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<style>\n",
    "/* 本电子讲义使用之CSS */\n",
    "div.code_cell {\n",
    "    background-color: #e5f1fe;\n",
    "}\n",
    "div.cell.selected {\n",
    "    background-color: #effee2;\n",
    "    font-size: 2rem;\n",
    "    line-height: 2.4rem;\n",
    "}\n",
    "div.cell.selected .rendered_html table {\n",
    "    font-size: 2rem !important;\n",
    "    line-height: 2.4rem !important;\n",
    "}\n",
    ".rendered_html pre code {\n",
    "    background-color: #C4E4ff;   \n",
    "    padding: 2px 25px;\n",
    "}\n",
    ".rendered_html pre {\n",
    "    background-color: #99c9ff;\n",
    "}\n",
    "div.code_cell .CodeMirror {\n",
    "    font-size: 2rem !important;\n",
    "    line-height: 2.4rem !important;\n",
    "}\n",
    ".rendered_html img, .rendered_html svg {\n",
    "    max-width: 100%;\n",
    "    height: auto;\n",
    "    float: center;\n",
    "}\n",
    "/* Gradient transparent - color - transparent */\n",
    "hr {\n",
    "    border: 0;\n",
    "    border-bottom: 1px dashed #ccc;\n",
    "}\n",
    ".emoticon{\n",
    "    font-size: 5rem;\n",
    "    line-height: 4.4rem;\n",
    "    text-align: center;\n",
    "    vertical-align: middle;\n",
    "}\n",
    "\n",
    "</style>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 回顾地理编码、逆地理编码、步行路径规划（代码A）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "import requests\n",
    "key_xu =\"1a8b4a8f8eacf6e72af8287289e0e270\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A-1 获取地理编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'status': '1', 'info': 'OK', 'infocode': '10000', 'count': '1', 'geocodes': [{'formatted_address': '广东省广州市从化区中山大学南方学院', 'country': '中国', 'province': '广东省', 'citycode': '020', 'city': '广州市', 'district': '从化区', 'township': [], 'neighborhood': {'name': [], 'type': []}, 'building': {'name': [], 'type': []}, 'adcode': '440117', 'street': [], 'number': [], 'location': '113.679287,23.632575', 'level': '兴趣点'}]}\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>formatted_address</th>\n",
       "      <th>country</th>\n",
       "      <th>province</th>\n",
       "      <th>citycode</th>\n",
       "      <th>city</th>\n",
       "      <th>district</th>\n",
       "      <th>township</th>\n",
       "      <th>adcode</th>\n",
       "      <th>street</th>\n",
       "      <th>number</th>\n",
       "      <th>location</th>\n",
       "      <th>level</th>\n",
       "      <th>neighborhood.name</th>\n",
       "      <th>neighborhood.type</th>\n",
       "      <th>building.name</th>\n",
       "      <th>building.type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>广东省广州市从化区中山大学南方学院</td>\n",
       "      <td>中国</td>\n",
       "      <td>广东省</td>\n",
       "      <td>020</td>\n",
       "      <td>广州市</td>\n",
       "      <td>从化区</td>\n",
       "      <td>[]</td>\n",
       "      <td>440117</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>113.679287,23.632575</td>\n",
       "      <td>兴趣点</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   formatted_address country province citycode city district township  adcode  \\\n",
       "0  广东省广州市从化区中山大学南方学院      中国      广东省      020  广州市      从化区       []  440117   \n",
       "\n",
       "  street number              location level neighborhood.name  \\\n",
       "0     []     []  113.679287,23.632575   兴趣点                []   \n",
       "\n",
       "  neighborhood.type building.name building.type  \n",
       "0                []            []            []  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "中大南方地理编码: 113.679287,23.632575\n"
     ]
    }
   ],
   "source": [
    "# A-1 地理编码\n",
    "def geocode(address,city=None,batch=None,sig=None)->dict:\n",
    "    \"\"\"获取地理编码\"\"\"\n",
    "    url = 'https://restapi.amap.com/v3/geocode/geo?parameters'\n",
    "    params={\n",
    "        'key': key_xu,\n",
    "        'address':address,\n",
    "        'city':city,\n",
    "        'batch':batch,\n",
    "        'sig':sig,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data\n",
    "中大南方 = geocode(address='广东省广州市从化区中山大学南方学院')\n",
    "print(中大南方)\n",
    "df_中大南方地理编码 = pd.json_normalize(中大南方['geocodes'])\n",
    "display(df_中大南方地理编码)\n",
    "中大南方地理编码 = 中大南方['geocodes'][0]['location']\n",
    "print(\"中大南方地理编码:\",中大南方地理编码)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A-2 逆地理编码（基础/全）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name '中大南方逆地理编码' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-17-4c6e90b3bf99>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     20\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     21\u001b[0m \u001b[0m中大南方逆地理编码_base\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mregeocode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m中大南方地理编码\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 22\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m中大南方逆地理编码\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     23\u001b[0m \u001b[0mdf_中大南方逆地理编码\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjson_normalize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m中大南方逆地理编码\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mT\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     24\u001b[0m \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf_中大南方逆地理编码\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name '中大南方逆地理编码' is not defined"
     ]
    }
   ],
   "source": [
    "# A-2 基础逆地理编码分析\n",
    "def regeocode(location,poitype=None,radius=None,extensions=\"base\",batch=False,roadlevel=None,sig=None,homeorcorp=None)->dict:\n",
    "    \"\"\"获取逆地理编码\"\"\"\n",
    "    url = 'https://restapi.amap.com/v3/geocode/regeo?parameters'\n",
    "    params={\n",
    "        'key': key_xu,\n",
    "        'location':location,\n",
    "        'poitype':poitype,\n",
    "        'radius':radius,\n",
    "        'extensions':extensions,\n",
    "        'batch':batch,\n",
    "        'roadlevel':roadlevel,\n",
    "        'homeorcorp':homeorcorp,\n",
    "        'sig':sig,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data\n",
    "\n",
    "中大南方逆地理编码_base = regeocode(中大南方地理编码)\n",
    "print(中大南方逆地理编码)\n",
    "df_中大南方逆地理编码 = pd.json_normalize(中大南方逆地理编码).T\n",
    "display(df_中大南方逆地理编码)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'status': '1', 'regeocode': {'roads': [{'id': '020F49F0050461203', 'location': '113.68,23.634', 'direction': '南', 'name': '博学路', 'distance': '156.951'}, {'id': '020F49F0050462451', 'location': '113.677,23.6347', 'direction': '东南', 'name': '中山路', 'distance': '343.951'}, {'id': '020F49F006047765', 'location': '113.682,23.6394', 'direction': '南', 'name': 'S29从莞深高速', 'distance': '807.947'}], 'roadinters': [{'second_name': '中山路', 'first_id': '020F49F0050461203', 'second_id': '020F49F0050462451', 'location': '113.6767944,23.63466139', 'distance': '343.951', 'first_name': '博学路', 'direction': '东南'}], 'formatted_address': '广东省广州市从化区温泉镇中山大学南方学院', 'addressComponent': {'city': '广州市', 'province': '广东省', 'adcode': '440117', 'district': '从化区', 'towncode': '440117103000', 'streetNumber': {'number': '7号', 'location': '113.6786,23.6333289', 'direction': '西北', 'distance': '109.203', 'street': '博学路'}, 'country': '中国', 'township': '温泉镇', 'businessAreas': [[]], 'building': {'name': [], 'type': []}, 'neighborhood': {'name': [], 'type': []}, 'citycode': '020'}, 'aois': [{'area': '536585.849985', 'type': '141201', 'id': 'B00140MR9A', 'location': '113.679262,23.632583', 'adcode': '440117', 'name': '中山大学南方学院', 'distance': '0'}], 'pois': [{'id': 'B00140MR9A', 'direction': '西', 'businessarea': [], 'address': '温泉大道882号', 'poiweight': '0.450402', 'name': '中山大学南方学院', 'location': '113.679262,23.632583', 'distance': '2.69979', 'tel': '020-61787326;020-61787333', 'type': '科教文化服务;学校;高等院校'}, {'id': 'B0FFF2VMJ4', 'direction': '东南', 'businessarea': [], 'address': '温泉大道886号中山大学南方学院内', 'poiweight': '0.148531', 'name': '中山大学南方学院-综合楼', 'location': '113.680117,23.631544', 'distance': '142.466', 'tel': [], 'type': '科教文化服务;学校;学校'}, {'id': 'B0FFFTC9PH', 'direction': '东北', 'businessarea': [], 'address': '博学路附近', 'poiweight': '0.193172', 'name': '中山大学南方学院教学楼10号', 'location': '113.680125,23.633492', 'distance': '132.988', 'tel': [], 'type': '科教文化服务;科教文化场所;科教文化场所'}, {'id': 'B00141TQKX', 'direction': '西北', 'businessarea': [], 'address': '温泉大道882', 'poiweight': '0.148531', 'name': '中山大学南方学院教学楼6号', 'location': '113.678424,23.633710', 'distance': '153.818', 'tel': [], 'type': '科教文化服务;学校;学校'}, {'id': 'B00141WQCO', 'direction': '东北', 'businessarea': [], 'address': '博学路附近', 'poiweight': '0.14954', 'name': '中山大学南方学院教学楼8号', 'location': '113.680399,23.634329', 'distance': '225.543', 'tel': [], 'type': '科教文化服务;科教文化场所;科教文化场所'}, {'id': 'B00141TRVH', 'direction': '西南', 'businessarea': [], 'address': '博学路21', 'poiweight': '0.148531', 'name': '中山大学南方学院教学楼2号', 'location': '113.677060,23.631346', 'distance': '264.846', 'tel': [], 'type': '科教文化服务;科教文化场所;科教文化场所'}, {'id': 'B0FFKP9ET5', 'direction': '西南', 'businessarea': [], 'address': '博学路附近', 'poiweight': '0.191742', 'name': '中山大学南方学院1号实验楼', 'location': '113.678215,23.631370', 'distance': '172.86', 'tel': [], 'type': '科教文化服务;科教文化场所;科教文化场所'}, {'id': 'B00140TWHT', 'direction': '南', 'businessarea': [], 'address': '笃行路2', 'poiweight': '0.157653', 'name': '教工住宅1号', 'location': '113.678490,23.630432', 'distance': '251.758', 'tel': [], 'type': '商务住宅;住宅区;住宅小区'}, {'id': 'B0FFHC4XU0', 'direction': '南', 'businessarea': [], 'address': '温泉大道886号', 'poiweight': '0.158426', 'name': '中山大学南方学院学术交流中心', 'location': '113.679959,23.630496', 'distance': '241.095', 'tel': [], 'type': '科教文化服务;科教文化场所;科教文化场所'}, {'id': 'B0FFLBEOND', 'direction': '东南', 'businessarea': [], 'address': [], 'poiweight': '0.190963', 'name': '聚贤楼10号', 'location': '113.681253,23.631036', 'distance': '263.444', 'tel': [], 'type': '商务住宅;住宅区;宿舍'}, {'id': 'B0FFHJFHVN', 'direction': '北', 'businessarea': [], 'address': '温泉镇温泉大道', 'poiweight': '0.210336', 'name': '中山大学南方学院第五食堂', 'location': '113.679234,23.634647', 'distance': '230.464', 'tel': [], 'type': '餐饮服务;中餐厅;中餐厅'}, {'id': 'B0FFJLW0O9', 'direction': '西', 'businessarea': [], 'address': '博学路4附近', 'poiweight': '0.191645', 'name': '中山大学南方学院西区饭堂', 'location': '113.676210,23.632177', 'distance': '316.572', 'tel': [], 'type': '科教文化服务;科教文化场所;科教文化场所'}, {'id': 'B0FFJBZLYT', 'direction': '西北', 'businessarea': [], 'address': '中山路与博学路交叉口东南50米', 'poiweight': '0.297382', 'name': '铜像广场', 'location': '113.676921,23.634555', 'distance': '326.444', 'tel': [], 'type': '风景名胜;风景名胜;风景名胜'}, {'id': 'B0FFG8CSEK', 'direction': '东', 'businessarea': [], 'address': '温泉镇', 'poiweight': '0.185371', 'name': 'L5员工宿舍', 'location': '113.682583,23.631487', 'distance': '356.923', 'tel': [], 'type': '商务住宅;住宅区;宿舍'}, {'id': 'B0FFKPXO2S', 'direction': '北', 'businessarea': [], 'address': '博学路附近', 'poiweight': '0.188247', 'name': '中山大学南方学院医务室', 'location': '113.679394,23.635924', 'distance': '372.556', 'tel': [], 'type': '医疗保健服务;医疗保健服务场所;医疗保健服务场所'}, {'id': 'B0FFHHLMF8', 'direction': '东北', 'businessarea': [], 'address': '中山大学南方学院明辩路2号第三饭堂', 'poiweight': '0.178935', 'name': '茗语轩餐厅', 'location': '113.681901,23.634495', 'distance': '341.332', 'tel': '13929501395', 'type': '餐饮服务;中餐厅;中餐厅'}, {'id': 'B0FFGXGN3K', 'direction': '东', 'businessarea': [], 'address': [], 'poiweight': '0.188657', 'name': '中山大学南方学院宿舍H25', 'location': '113.683474,23.632020', 'distance': '430.984', 'tel': [], 'type': '商务住宅;住宅区;宿舍'}, {'id': 'B0FFGQ2UG9', 'direction': '东', 'businessarea': [], 'address': '温泉镇', 'poiweight': '0.189884', 'name': 'H23学生宿舍楼', 'location': '113.684021,23.633311', 'distance': '489.185', 'tel': [], 'type': '商务住宅;住宅区;宿舍'}, {'id': 'B0FFGBBC19', 'direction': '东', 'businessarea': [], 'address': '温泉镇', 'poiweight': '0.2587', 'name': '保利桃花源', 'location': '113.685212,23.633333', 'distance': '609.461', 'tel': '020-37918888', 'type': '商务住宅;住宅区;别墅'}, {'id': 'B00140U844', 'direction': '西南', 'businessarea': [], 'address': '博学路24', 'poiweight': '0.203285', 'name': '学生宿舍H-5', 'location': '113.677267,23.629149', 'distance': '433.01', 'tel': [], 'type': '地名地址信息;门牌信息;楼栋号'}, {'id': 'B0FFKQ210C', 'direction': '北', 'businessarea': [], 'address': [], 'poiweight': '0.218258', 'name': '中山大学南方学院聚贤楼7号', 'location': '113.680958,23.636938', 'distance': '514.173', 'tel': [], 'type': '商务住宅;商务住宅相关;商务住宅相关'}, {'id': 'B0FFHVQGBY', 'direction': '南', 'businessarea': [], 'address': [], 'poiweight': '0.170485', 'name': '广州市从化温泉塔洛灯商店', 'location': '113.680212,23.627906', 'distance': '527.663', 'tel': [], 'type': '购物服务;家居建材市场;家居建材市场'}, {'id': 'B0FFLJV95W', 'direction': '东北', 'businessarea': [], 'address': [], 'poiweight': '0.28899', 'name': '中山大学南方学院12BLOCK', 'location': '113.682608,23.636598', 'distance': '560.894', 'tel': [], 'type': '科教文化服务;学校;高等院校'}, {'id': 'B0FFGF9WTH', 'direction': '东北', 'businessarea': [], 'address': '从化区', 'poiweight': '0.196592', 'name': '田螺山隧道', 'location': '113.683736,23.638949', 'distance': '841.305', 'tel': [], 'type': '地名地址信息;交通地名;隧道'}]}, 'info': 'OK', 'infocode': '10000'}\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>status</th>\n",
       "      <th>info</th>\n",
       "      <th>infocode</th>\n",
       "      <th>regeocode.roads</th>\n",
       "      <th>regeocode.roadinters</th>\n",
       "      <th>regeocode.formatted_address</th>\n",
       "      <th>regeocode.addressComponent.city</th>\n",
       "      <th>regeocode.addressComponent.province</th>\n",
       "      <th>regeocode.addressComponent.adcode</th>\n",
       "      <th>regeocode.addressComponent.district</th>\n",
       "      <th>...</th>\n",
       "      <th>regeocode.addressComponent.country</th>\n",
       "      <th>regeocode.addressComponent.township</th>\n",
       "      <th>regeocode.addressComponent.businessAreas</th>\n",
       "      <th>regeocode.addressComponent.building.name</th>\n",
       "      <th>regeocode.addressComponent.building.type</th>\n",
       "      <th>regeocode.addressComponent.neighborhood.name</th>\n",
       "      <th>regeocode.addressComponent.neighborhood.type</th>\n",
       "      <th>regeocode.addressComponent.citycode</th>\n",
       "      <th>regeocode.aois</th>\n",
       "      <th>regeocode.pois</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>OK</td>\n",
       "      <td>10000</td>\n",
       "      <td>[{'id': '020F49F0050461203', 'location': '113....</td>\n",
       "      <td>[{'second_name': '中山路', 'first_id': '020F49F00...</td>\n",
       "      <td>广东省广州市从化区温泉镇中山大学南方学院</td>\n",
       "      <td>广州市</td>\n",
       "      <td>广东省</td>\n",
       "      <td>440117</td>\n",
       "      <td>从化区</td>\n",
       "      <td>...</td>\n",
       "      <td>中国</td>\n",
       "      <td>温泉镇</td>\n",
       "      <td>[[]]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>020</td>\n",
       "      <td>[{'area': '536585.849985', 'type': '141201', '...</td>\n",
       "      <td>[{'id': 'B00140MR9A', 'direction': '西', 'busin...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  status info infocode                                    regeocode.roads  \\\n",
       "0      1   OK    10000  [{'id': '020F49F0050461203', 'location': '113....   \n",
       "\n",
       "                                regeocode.roadinters  \\\n",
       "0  [{'second_name': '中山路', 'first_id': '020F49F00...   \n",
       "\n",
       "  regeocode.formatted_address regeocode.addressComponent.city  \\\n",
       "0        广东省广州市从化区温泉镇中山大学南方学院                             广州市   \n",
       "\n",
       "  regeocode.addressComponent.province regeocode.addressComponent.adcode  \\\n",
       "0                                 广东省                            440117   \n",
       "\n",
       "  regeocode.addressComponent.district  ... regeocode.addressComponent.country  \\\n",
       "0                                 从化区  ...                                 中国   \n",
       "\n",
       "  regeocode.addressComponent.township  \\\n",
       "0                                 温泉镇   \n",
       "\n",
       "  regeocode.addressComponent.businessAreas  \\\n",
       "0                                     [[]]   \n",
       "\n",
       "  regeocode.addressComponent.building.name  \\\n",
       "0                                       []   \n",
       "\n",
       "  regeocode.addressComponent.building.type  \\\n",
       "0                                       []   \n",
       "\n",
       "  regeocode.addressComponent.neighborhood.name  \\\n",
       "0                                           []   \n",
       "\n",
       "  regeocode.addressComponent.neighborhood.type  \\\n",
       "0                                           []   \n",
       "\n",
       "  regeocode.addressComponent.citycode  \\\n",
       "0                                 020   \n",
       "\n",
       "                                      regeocode.aois  \\\n",
       "0  [{'area': '536585.849985', 'type': '141201', '...   \n",
       "\n",
       "                                      regeocode.pois  \n",
       "0  [{'id': 'B00140MR9A', 'direction': '西', 'busin...  \n",
       "\n",
       "[1 rows x 26 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# A-2 Extra 全部逆地理编码分析\n",
    "中大南方逆地理编码_all = regeocode(中大南方地理编码,extensions=\"all\")\n",
    "print(中大南方逆地理编码_all)\n",
    "df_中大南方逆地理编码_all = pd.json_normalize(中大南方逆地理编码_all)\n",
    "display(df_中大南方逆地理编码_all)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A-3 全部逆地理编码分析细节\n",
    "\n",
    "1. 大家先思考一个问题，你给高德的地址和他给你的，是不是它大气的多？\n",
    "2. 这些细节哪些是有用的？假设用户给你一个地址，和一定的诉求，我们是不是可以推荐一些POI地址？\n",
    "\n",
    "![](http://static.leiphone.com/uploads/new/article/740_740/201612/5860bb12da0e0.png?imageMogr2/format/jpg/quality/90)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>location</th>\n",
       "      <th>direction</th>\n",
       "      <th>name</th>\n",
       "      <th>distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>020F49F0050461203</td>\n",
       "      <td>113.68,23.634</td>\n",
       "      <td>南</td>\n",
       "      <td>博学路</td>\n",
       "      <td>156.951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>020F49F0050462451</td>\n",
       "      <td>113.677,23.6347</td>\n",
       "      <td>东南</td>\n",
       "      <td>中山路</td>\n",
       "      <td>343.951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>020F49F006047765</td>\n",
       "      <td>113.682,23.6394</td>\n",
       "      <td>南</td>\n",
       "      <td>S29从莞深高速</td>\n",
       "      <td>807.947</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  id         location direction      name distance\n",
       "0  020F49F0050461203    113.68,23.634         南       博学路  156.951\n",
       "1  020F49F0050462451  113.677,23.6347        东南       中山路  343.951\n",
       "2   020F49F006047765  113.682,23.6394         南  S29从莞深高速  807.947"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>second_name</th>\n",
       "      <th>first_id</th>\n",
       "      <th>second_id</th>\n",
       "      <th>location</th>\n",
       "      <th>distance</th>\n",
       "      <th>first_name</th>\n",
       "      <th>direction</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>中山路</td>\n",
       "      <td>020F49F0050461203</td>\n",
       "      <td>020F49F0050462451</td>\n",
       "      <td>113.6767944,23.63466139</td>\n",
       "      <td>343.951</td>\n",
       "      <td>博学路</td>\n",
       "      <td>东南</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  second_name           first_id          second_id                 location  \\\n",
       "0         中山路  020F49F0050461203  020F49F0050462451  113.6767944,23.63466139   \n",
       "\n",
       "  distance first_name direction  \n",
       "0  343.951        博学路        东南  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>area</th>\n",
       "      <th>type</th>\n",
       "      <th>id</th>\n",
       "      <th>location</th>\n",
       "      <th>adcode</th>\n",
       "      <th>name</th>\n",
       "      <th>distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536585.849985</td>\n",
       "      <td>141201</td>\n",
       "      <td>B00140MR9A</td>\n",
       "      <td>113.679262,23.632583</td>\n",
       "      <td>440117</td>\n",
       "      <td>中山大学南方学院</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            area    type          id              location  adcode      name  \\\n",
       "0  536585.849985  141201  B00140MR9A  113.679262,23.632583  440117  中山大学南方学院   \n",
       "\n",
       "  distance  \n",
       "0        0  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>direction</th>\n",
       "      <th>businessarea</th>\n",
       "      <th>address</th>\n",
       "      <th>poiweight</th>\n",
       "      <th>name</th>\n",
       "      <th>location</th>\n",
       "      <th>distance</th>\n",
       "      <th>tel</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>B00140MR9A</td>\n",
       "      <td>西</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉大道882号</td>\n",
       "      <td>0.450402</td>\n",
       "      <td>中山大学南方学院</td>\n",
       "      <td>113.679262,23.632583</td>\n",
       "      <td>2.69979</td>\n",
       "      <td>020-61787326;020-61787333</td>\n",
       "      <td>科教文化服务;学校;高等院校</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B0FFF2VMJ4</td>\n",
       "      <td>东南</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉大道886号中山大学南方学院内</td>\n",
       "      <td>0.148531</td>\n",
       "      <td>中山大学南方学院-综合楼</td>\n",
       "      <td>113.680117,23.631544</td>\n",
       "      <td>142.466</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;学校;学校</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>B0FFFTC9PH</td>\n",
       "      <td>东北</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路附近</td>\n",
       "      <td>0.193172</td>\n",
       "      <td>中山大学南方学院教学楼10号</td>\n",
       "      <td>113.680125,23.633492</td>\n",
       "      <td>132.988</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;科教文化场所;科教文化场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>B00141TQKX</td>\n",
       "      <td>西北</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉大道882</td>\n",
       "      <td>0.148531</td>\n",
       "      <td>中山大学南方学院教学楼6号</td>\n",
       "      <td>113.678424,23.633710</td>\n",
       "      <td>153.818</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;学校;学校</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>B00141WQCO</td>\n",
       "      <td>东北</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路附近</td>\n",
       "      <td>0.14954</td>\n",
       "      <td>中山大学南方学院教学楼8号</td>\n",
       "      <td>113.680399,23.634329</td>\n",
       "      <td>225.543</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;科教文化场所;科教文化场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>B00141TRVH</td>\n",
       "      <td>西南</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路21</td>\n",
       "      <td>0.148531</td>\n",
       "      <td>中山大学南方学院教学楼2号</td>\n",
       "      <td>113.677060,23.631346</td>\n",
       "      <td>264.846</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;科教文化场所;科教文化场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>B0FFKP9ET5</td>\n",
       "      <td>西南</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路附近</td>\n",
       "      <td>0.191742</td>\n",
       "      <td>中山大学南方学院1号实验楼</td>\n",
       "      <td>113.678215,23.631370</td>\n",
       "      <td>172.86</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;科教文化场所;科教文化场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>B00140TWHT</td>\n",
       "      <td>南</td>\n",
       "      <td>[]</td>\n",
       "      <td>笃行路2</td>\n",
       "      <td>0.157653</td>\n",
       "      <td>教工住宅1号</td>\n",
       "      <td>113.678490,23.630432</td>\n",
       "      <td>251.758</td>\n",
       "      <td>[]</td>\n",
       "      <td>商务住宅;住宅区;住宅小区</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>B0FFHC4XU0</td>\n",
       "      <td>南</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉大道886号</td>\n",
       "      <td>0.158426</td>\n",
       "      <td>中山大学南方学院学术交流中心</td>\n",
       "      <td>113.679959,23.630496</td>\n",
       "      <td>241.095</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;科教文化场所;科教文化场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>B0FFLBEOND</td>\n",
       "      <td>东南</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>0.190963</td>\n",
       "      <td>聚贤楼10号</td>\n",
       "      <td>113.681253,23.631036</td>\n",
       "      <td>263.444</td>\n",
       "      <td>[]</td>\n",
       "      <td>商务住宅;住宅区;宿舍</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B0FFHJFHVN</td>\n",
       "      <td>北</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉镇温泉大道</td>\n",
       "      <td>0.210336</td>\n",
       "      <td>中山大学南方学院第五食堂</td>\n",
       "      <td>113.679234,23.634647</td>\n",
       "      <td>230.464</td>\n",
       "      <td>[]</td>\n",
       "      <td>餐饮服务;中餐厅;中餐厅</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>B0FFJLW0O9</td>\n",
       "      <td>西</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路4附近</td>\n",
       "      <td>0.191645</td>\n",
       "      <td>中山大学南方学院西区饭堂</td>\n",
       "      <td>113.676210,23.632177</td>\n",
       "      <td>316.572</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;科教文化场所;科教文化场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>B0FFJBZLYT</td>\n",
       "      <td>西北</td>\n",
       "      <td>[]</td>\n",
       "      <td>中山路与博学路交叉口东南50米</td>\n",
       "      <td>0.297382</td>\n",
       "      <td>铜像广场</td>\n",
       "      <td>113.676921,23.634555</td>\n",
       "      <td>326.444</td>\n",
       "      <td>[]</td>\n",
       "      <td>风景名胜;风景名胜;风景名胜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>B0FFG8CSEK</td>\n",
       "      <td>东</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉镇</td>\n",
       "      <td>0.185371</td>\n",
       "      <td>L5员工宿舍</td>\n",
       "      <td>113.682583,23.631487</td>\n",
       "      <td>356.923</td>\n",
       "      <td>[]</td>\n",
       "      <td>商务住宅;住宅区;宿舍</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>B0FFKPXO2S</td>\n",
       "      <td>北</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路附近</td>\n",
       "      <td>0.188247</td>\n",
       "      <td>中山大学南方学院医务室</td>\n",
       "      <td>113.679394,23.635924</td>\n",
       "      <td>372.556</td>\n",
       "      <td>[]</td>\n",
       "      <td>医疗保健服务;医疗保健服务场所;医疗保健服务场所</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>B0FFHHLMF8</td>\n",
       "      <td>东北</td>\n",
       "      <td>[]</td>\n",
       "      <td>中山大学南方学院明辩路2号第三饭堂</td>\n",
       "      <td>0.178935</td>\n",
       "      <td>茗语轩餐厅</td>\n",
       "      <td>113.681901,23.634495</td>\n",
       "      <td>341.332</td>\n",
       "      <td>13929501395</td>\n",
       "      <td>餐饮服务;中餐厅;中餐厅</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>B0FFGXGN3K</td>\n",
       "      <td>东</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>0.188657</td>\n",
       "      <td>中山大学南方学院宿舍H25</td>\n",
       "      <td>113.683474,23.632020</td>\n",
       "      <td>430.984</td>\n",
       "      <td>[]</td>\n",
       "      <td>商务住宅;住宅区;宿舍</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>B0FFGQ2UG9</td>\n",
       "      <td>东</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉镇</td>\n",
       "      <td>0.189884</td>\n",
       "      <td>H23学生宿舍楼</td>\n",
       "      <td>113.684021,23.633311</td>\n",
       "      <td>489.185</td>\n",
       "      <td>[]</td>\n",
       "      <td>商务住宅;住宅区;宿舍</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>B0FFGBBC19</td>\n",
       "      <td>东</td>\n",
       "      <td>[]</td>\n",
       "      <td>温泉镇</td>\n",
       "      <td>0.2587</td>\n",
       "      <td>保利桃花源</td>\n",
       "      <td>113.685212,23.633333</td>\n",
       "      <td>609.461</td>\n",
       "      <td>020-37918888</td>\n",
       "      <td>商务住宅;住宅区;别墅</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>B00140U844</td>\n",
       "      <td>西南</td>\n",
       "      <td>[]</td>\n",
       "      <td>博学路24</td>\n",
       "      <td>0.203285</td>\n",
       "      <td>学生宿舍H-5</td>\n",
       "      <td>113.677267,23.629149</td>\n",
       "      <td>433.01</td>\n",
       "      <td>[]</td>\n",
       "      <td>地名地址信息;门牌信息;楼栋号</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>B0FFKQ210C</td>\n",
       "      <td>北</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>0.218258</td>\n",
       "      <td>中山大学南方学院聚贤楼7号</td>\n",
       "      <td>113.680958,23.636938</td>\n",
       "      <td>514.173</td>\n",
       "      <td>[]</td>\n",
       "      <td>商务住宅;商务住宅相关;商务住宅相关</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>B0FFHVQGBY</td>\n",
       "      <td>南</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>0.170485</td>\n",
       "      <td>广州市从化温泉塔洛灯商店</td>\n",
       "      <td>113.680212,23.627906</td>\n",
       "      <td>527.663</td>\n",
       "      <td>[]</td>\n",
       "      <td>购物服务;家居建材市场;家居建材市场</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>B0FFLJV95W</td>\n",
       "      <td>东北</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>0.28899</td>\n",
       "      <td>中山大学南方学院12BLOCK</td>\n",
       "      <td>113.682608,23.636598</td>\n",
       "      <td>560.894</td>\n",
       "      <td>[]</td>\n",
       "      <td>科教文化服务;学校;高等院校</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>B0FFGF9WTH</td>\n",
       "      <td>东北</td>\n",
       "      <td>[]</td>\n",
       "      <td>从化区</td>\n",
       "      <td>0.196592</td>\n",
       "      <td>田螺山隧道</td>\n",
       "      <td>113.683736,23.638949</td>\n",
       "      <td>841.305</td>\n",
       "      <td>[]</td>\n",
       "      <td>地名地址信息;交通地名;隧道</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            id direction businessarea            address poiweight  \\\n",
       "0   B00140MR9A         西           []           温泉大道882号  0.450402   \n",
       "1   B0FFF2VMJ4        东南           []  温泉大道886号中山大学南方学院内  0.148531   \n",
       "2   B0FFFTC9PH        东北           []              博学路附近  0.193172   \n",
       "3   B00141TQKX        西北           []            温泉大道882  0.148531   \n",
       "4   B00141WQCO        东北           []              博学路附近   0.14954   \n",
       "5   B00141TRVH        西南           []              博学路21  0.148531   \n",
       "6   B0FFKP9ET5        西南           []              博学路附近  0.191742   \n",
       "7   B00140TWHT         南           []               笃行路2  0.157653   \n",
       "8   B0FFHC4XU0         南           []           温泉大道886号  0.158426   \n",
       "9   B0FFLBEOND        东南           []                 []  0.190963   \n",
       "10  B0FFHJFHVN         北           []            温泉镇温泉大道  0.210336   \n",
       "11  B0FFJLW0O9         西           []             博学路4附近  0.191645   \n",
       "12  B0FFJBZLYT        西北           []    中山路与博学路交叉口东南50米  0.297382   \n",
       "13  B0FFG8CSEK         东           []                温泉镇  0.185371   \n",
       "14  B0FFKPXO2S         北           []              博学路附近  0.188247   \n",
       "15  B0FFHHLMF8        东北           []  中山大学南方学院明辩路2号第三饭堂  0.178935   \n",
       "16  B0FFGXGN3K         东           []                 []  0.188657   \n",
       "17  B0FFGQ2UG9         东           []                温泉镇  0.189884   \n",
       "18  B0FFGBBC19         东           []                温泉镇    0.2587   \n",
       "19  B00140U844        西南           []              博学路24  0.203285   \n",
       "20  B0FFKQ210C         北           []                 []  0.218258   \n",
       "21  B0FFHVQGBY         南           []                 []  0.170485   \n",
       "22  B0FFLJV95W        东北           []                 []   0.28899   \n",
       "23  B0FFGF9WTH        东北           []                从化区  0.196592   \n",
       "\n",
       "               name              location distance                        tel  \\\n",
       "0          中山大学南方学院  113.679262,23.632583  2.69979  020-61787326;020-61787333   \n",
       "1      中山大学南方学院-综合楼  113.680117,23.631544  142.466                         []   \n",
       "2    中山大学南方学院教学楼10号  113.680125,23.633492  132.988                         []   \n",
       "3     中山大学南方学院教学楼6号  113.678424,23.633710  153.818                         []   \n",
       "4     中山大学南方学院教学楼8号  113.680399,23.634329  225.543                         []   \n",
       "5     中山大学南方学院教学楼2号  113.677060,23.631346  264.846                         []   \n",
       "6     中山大学南方学院1号实验楼  113.678215,23.631370   172.86                         []   \n",
       "7            教工住宅1号  113.678490,23.630432  251.758                         []   \n",
       "8    中山大学南方学院学术交流中心  113.679959,23.630496  241.095                         []   \n",
       "9            聚贤楼10号  113.681253,23.631036  263.444                         []   \n",
       "10     中山大学南方学院第五食堂  113.679234,23.634647  230.464                         []   \n",
       "11     中山大学南方学院西区饭堂  113.676210,23.632177  316.572                         []   \n",
       "12             铜像广场  113.676921,23.634555  326.444                         []   \n",
       "13           L5员工宿舍  113.682583,23.631487  356.923                         []   \n",
       "14      中山大学南方学院医务室  113.679394,23.635924  372.556                         []   \n",
       "15            茗语轩餐厅  113.681901,23.634495  341.332                13929501395   \n",
       "16    中山大学南方学院宿舍H25  113.683474,23.632020  430.984                         []   \n",
       "17         H23学生宿舍楼  113.684021,23.633311  489.185                         []   \n",
       "18            保利桃花源  113.685212,23.633333  609.461               020-37918888   \n",
       "19          学生宿舍H-5  113.677267,23.629149   433.01                         []   \n",
       "20    中山大学南方学院聚贤楼7号  113.680958,23.636938  514.173                         []   \n",
       "21     广州市从化温泉塔洛灯商店  113.680212,23.627906  527.663                         []   \n",
       "22  中山大学南方学院12BLOCK  113.682608,23.636598  560.894                         []   \n",
       "23            田螺山隧道  113.683736,23.638949  841.305                         []   \n",
       "\n",
       "                        type  \n",
       "0             科教文化服务;学校;高等院校  \n",
       "1               科教文化服务;学校;学校  \n",
       "2       科教文化服务;科教文化场所;科教文化场所  \n",
       "3               科教文化服务;学校;学校  \n",
       "4       科教文化服务;科教文化场所;科教文化场所  \n",
       "5       科教文化服务;科教文化场所;科教文化场所  \n",
       "6       科教文化服务;科教文化场所;科教文化场所  \n",
       "7              商务住宅;住宅区;住宅小区  \n",
       "8       科教文化服务;科教文化场所;科教文化场所  \n",
       "9                商务住宅;住宅区;宿舍  \n",
       "10              餐饮服务;中餐厅;中餐厅  \n",
       "11      科教文化服务;科教文化场所;科教文化场所  \n",
       "12            风景名胜;风景名胜;风景名胜  \n",
       "13               商务住宅;住宅区;宿舍  \n",
       "14  医疗保健服务;医疗保健服务场所;医疗保健服务场所  \n",
       "15              餐饮服务;中餐厅;中餐厅  \n",
       "16               商务住宅;住宅区;宿舍  \n",
       "17               商务住宅;住宅区;宿舍  \n",
       "18               商务住宅;住宅区;别墅  \n",
       "19           地名地址信息;门牌信息;楼栋号  \n",
       "20        商务住宅;商务住宅相关;商务住宅相关  \n",
       "21        购物服务;家居建材市场;家居建材市场  \n",
       "22            科教文化服务;学校;高等院校  \n",
       "23            地名地址信息;交通地名;隧道  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# A-3 分析细节\n",
    "roads = pd.json_normalize(中大南方逆地理编码_all['regeocode']['roads'])\n",
    "roadinters = pd.json_normalize(中大南方逆地理编码_all['regeocode']['roadinters'])\n",
    "aois = pd.json_normalize(中大南方逆地理编码_all['regeocode']['aois'])\n",
    "pois = pd.json_normalize(中大南方逆地理编码_all['regeocode']['pois'])\n",
    "display(roads,roadinters,aois,pois)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 学生练习：\n",
    "1. 观察和练习其他参数\n",
    "2. 想得到更大范围的搜索POI如何操作\n",
    "3. * 请pandas学过的同学对address进行分组groupby练习，尝试找寻不同根类地址下的type（可选用你所找寻的地址，不一定用中大南方）\n",
    "4. * 请思考如何对不同类型的服务进行分类？如美食、旅馆、加油站...等\n",
    "![](lianxi01.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 路径规划（点到点的过程）  \n",
    "\n",
    "\n",
    "### 产品的设计思维 \n",
    "\n",
    "1. 请思考，什么样的产品需要路径规划？\n",
    "2. 如果你的产品需要，你会如何使用？\n",
    "3. 最优路线如何选择？高德会用到什么算法？（推荐系统）\n",
    "    1. 推荐系统输入location么？（起点、终点？还是全部点？）\n",
    "    2. 实时的定位？（多长时间定位一次）更新1\n",
    "    3. 定位完成其他点的变化？距离的选择（用户希望路边有更多的需求还是希望快速找到目的地？）\n",
    "    4. 以上思考的越多，你的产品考虑的会越周全，避免产品后期的大量更改。\n",
    "    \n",
    "4. 可能了解的知识面，不需要清楚怎么做，但可以了解输入输出的结果是什么。参考如下图\n",
    "\n",
    "![](http://imgtec.eetrend.com/files/2019-03/%E5%8D%9A%E5%AE%A2/100018447-63696-10.jpg)\n",
    "\n",
    "-----\n",
    "![](https://pic2.zhimg.com/50/v2-45a26a9985308d90405dea78e6892dd0_r.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 步行路径规划（API基本流程）（代码B）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### B-1 准备base url、params、response.json（） "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# B-1 准备base url、params、response.json（） \n",
    "def walking(origin,destination,sig=None)->dict:\n",
    "    url = 'https://restapi.amap.com/v3/direction/walking?parameters'\n",
    "    params={\n",
    "        'key':key_xu,\n",
    "        'origin':origin,\n",
    "        'destination':destination,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### B-2 准备walking 参数\n",
    "\n",
    "请同学们尝试从A-3细节中获取的某两个教学楼的location，尝试步行路径规划（起点）🙅----->（终点）🙅‍"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(起点)中大南方_location: 113.679287,23.632575 (终点)龙岗社区居委会_location: 113.669129,23.600956\n"
     ]
    }
   ],
   "source": [
    "# B-2 准备walking 参数\n",
    "龙岗社区居委会 = geocode('广东省广州市从化区龙岗社区居委会')\n",
    "龙岗社区居委会_location = 龙岗社区居委会['geocodes'][0]['location']\n",
    "中大南方_location = 中大南方['geocodes'][0]['location']\n",
    "print(\"(起点)中大南方_location:\",中大南方_location,\"(终点)龙岗社区居委会_location:\",龙岗社区居委会_location)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### B-3 实现步行路径规划"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instruction</th>\n",
       "      <th>orientation</th>\n",
       "      <th>road</th>\n",
       "      <th>distance</th>\n",
       "      <th>duration</th>\n",
       "      <th>polyline</th>\n",
       "      <th>action</th>\n",
       "      <th>assistant_action</th>\n",
       "      <th>walk_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>向南步行161米右转</td>\n",
       "      <td>南</td>\n",
       "      <td>[]</td>\n",
       "      <td>161</td>\n",
       "      <td>129</td>\n",
       "      <td>113.679592,23.632088;113.679609,23.631003;113....</td>\n",
       "      <td>右转</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>向西步行99米左转</td>\n",
       "      <td>西</td>\n",
       "      <td>[]</td>\n",
       "      <td>99</td>\n",
       "      <td>79</td>\n",
       "      <td>113.67964,23.630634;113.679362,23.630521;113.6...</td>\n",
       "      <td>左转</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>向南步行237米左转</td>\n",
       "      <td>南</td>\n",
       "      <td>[]</td>\n",
       "      <td>237</td>\n",
       "      <td>190</td>\n",
       "      <td>113.678711,23.63036;113.678711,23.62934;113.67...</td>\n",
       "      <td>左转</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>向南步行498米向右前方行走</td>\n",
       "      <td>南</td>\n",
       "      <td>[]</td>\n",
       "      <td>498</td>\n",
       "      <td>398</td>\n",
       "      <td>113.678273,23.628368;113.678572,23.628338;113....</td>\n",
       "      <td>向右前方行走</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>向西南步行715米左转</td>\n",
       "      <td>西南</td>\n",
       "      <td>[]</td>\n",
       "      <td>715</td>\n",
       "      <td>572</td>\n",
       "      <td>113.678572,23.624653;113.678559,23.62451;113.6...</td>\n",
       "      <td>左转</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>向东南步行406米向右前方行走</td>\n",
       "      <td>东南</td>\n",
       "      <td>[]</td>\n",
       "      <td>406</td>\n",
       "      <td>325</td>\n",
       "      <td>113.675299,23.620048;113.675642,23.619991;113....</td>\n",
       "      <td>向右前方行走</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>沿乌土街向南步行1380米右转</td>\n",
       "      <td>南</td>\n",
       "      <td>乌土街</td>\n",
       "      <td>1380</td>\n",
       "      <td>1104</td>\n",
       "      <td>113.678181,23.617652;113.678095,23.617205;113....</td>\n",
       "      <td>右转</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>沿乌土街向西南步行165米直行</td>\n",
       "      <td>西南</td>\n",
       "      <td>乌土街</td>\n",
       "      <td>165</td>\n",
       "      <td>132</td>\n",
       "      <td>113.677535,23.605668;113.676988,23.605373;113....</td>\n",
       "      <td>直行</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>沿934县道向西步行118米直行</td>\n",
       "      <td>西</td>\n",
       "      <td>934县道</td>\n",
       "      <td>118</td>\n",
       "      <td>94</td>\n",
       "      <td>113.676159,23.604883;113.675929,23.604831;113....</td>\n",
       "      <td>直行</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>沿桃园东路向西南步行673米向右前方行走</td>\n",
       "      <td>西南</td>\n",
       "      <td>桃园东路</td>\n",
       "      <td>673</td>\n",
       "      <td>538</td>\n",
       "      <td>113.675009,23.604735;113.674236,23.604683;113....</td>\n",
       "      <td>向右前方行走</td>\n",
       "      <td>[]</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>沿桃园东路向西南步行117米到达目的地</td>\n",
       "      <td>西南</td>\n",
       "      <td>桃园东路</td>\n",
       "      <td>117</td>\n",
       "      <td>94</td>\n",
       "      <td>113.669714,23.601897;113.66964,23.601771;113.6...</td>\n",
       "      <td>[]</td>\n",
       "      <td>到达目的地</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             instruction orientation   road distance duration  \\\n",
       "0             向南步行161米右转           南     []      161      129   \n",
       "1              向西步行99米左转           西     []       99       79   \n",
       "2             向南步行237米左转           南     []      237      190   \n",
       "3         向南步行498米向右前方行走           南     []      498      398   \n",
       "4            向西南步行715米左转          西南     []      715      572   \n",
       "5        向东南步行406米向右前方行走          东南     []      406      325   \n",
       "6        沿乌土街向南步行1380米右转           南    乌土街     1380     1104   \n",
       "7        沿乌土街向西南步行165米直行          西南    乌土街      165      132   \n",
       "8       沿934县道向西步行118米直行           西  934县道      118       94   \n",
       "9   沿桃园东路向西南步行673米向右前方行走          西南   桃园东路      673      538   \n",
       "10   沿桃园东路向西南步行117米到达目的地          西南   桃园东路      117       94   \n",
       "\n",
       "                                             polyline  action  \\\n",
       "0   113.679592,23.632088;113.679609,23.631003;113....      右转   \n",
       "1   113.67964,23.630634;113.679362,23.630521;113.6...      左转   \n",
       "2   113.678711,23.63036;113.678711,23.62934;113.67...      左转   \n",
       "3   113.678273,23.628368;113.678572,23.628338;113....  向右前方行走   \n",
       "4   113.678572,23.624653;113.678559,23.62451;113.6...      左转   \n",
       "5   113.675299,23.620048;113.675642,23.619991;113....  向右前方行走   \n",
       "6   113.678181,23.617652;113.678095,23.617205;113....      右转   \n",
       "7   113.677535,23.605668;113.676988,23.605373;113....      直行   \n",
       "8   113.676159,23.604883;113.675929,23.604831;113....      直行   \n",
       "9   113.675009,23.604735;113.674236,23.604683;113....  向右前方行走   \n",
       "10  113.669714,23.601897;113.66964,23.601771;113.6...      []   \n",
       "\n",
       "   assistant_action walk_type  \n",
       "0                []         0  \n",
       "1                []         0  \n",
       "2                []         0  \n",
       "3                []         0  \n",
       "4                []         0  \n",
       "5                []         0  \n",
       "6                []         0  \n",
       "7                []         0  \n",
       "8                []         0  \n",
       "9                []         0  \n",
       "10            到达目的地         0  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0               向南步行161米右转\n",
       "1                向西步行99米左转\n",
       "2               向南步行237米左转\n",
       "3           向南步行498米向右前方行走\n",
       "4              向西南步行715米左转\n",
       "5          向东南步行406米向右前方行走\n",
       "6          沿乌土街向南步行1380米右转\n",
       "7          沿乌土街向西南步行165米直行\n",
       "8         沿934县道向西步行118米直行\n",
       "9     沿桃园东路向西南步行673米向右前方行走\n",
       "10     沿桃园东路向西南步行117米到达目的地\n",
       "Name: instruction, dtype: object"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# B-3 路径规划\n",
    "中大南方_龙岗社区居委会 = walking(中大南方_location,龙岗社区居委会_location)\n",
    "df_步行路径规划 = pd.json_normalize(中大南方_龙岗社区居委会[\"route\"][\"paths\"][0]['steps'])\n",
    "display(df_步行路径规划)\n",
    "df_步行路径规划[\"instruction\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 学生练习（请换用其他地址满足以下要求）\n",
    "\n",
    "1. 请更换地址，选择尽量含有walk_type参数，并查看高德是否返回正确\n",
    "2. 尝试不同的地址，检查返回的json\n",
    "\n",
    "\n",
    "![](lianxi02.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 公交路线规划（代码C）\n",
    "\n",
    "1. 请同学们细读可使用的参数\n",
    "2. 尝试更改参数带到你想要的目标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(起点)中山大学_location: 113.290219,23.128596 (终点)天河城_location: 113.361200,23.124680\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>status</th>\n",
       "      <th>info</th>\n",
       "      <th>infocode</th>\n",
       "      <th>count</th>\n",
       "      <th>route.origin</th>\n",
       "      <th>route.destination</th>\n",
       "      <th>route.distance</th>\n",
       "      <th>route.taxi_cost</th>\n",
       "      <th>route.transits</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>OK</td>\n",
       "      <td>10000</td>\n",
       "      <td>5</td>\n",
       "      <td>113.290219,23.128596</td>\n",
       "      <td>113.361200,23.124680</td>\n",
       "      <td>7012</td>\n",
       "      <td>21.7312</td>\n",
       "      <td>[{'cost': '4.0', 'duration': '2443', 'nightfla...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  status info infocode count          route.origin     route.destination  \\\n",
       "0      1   OK    10000     5  113.290219,23.128596  113.361200,23.124680   \n",
       "\n",
       "  route.distance route.taxi_cost  \\\n",
       "0           7012         21.7312   \n",
       "\n",
       "                                      route.transits  \n",
       "0  [{'cost': '4.0', 'duration': '2443', 'nightfla...  "
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# C-1\n",
    "def integrated(origin,destination,city,cityd=None,extensions='base',strategy=None,nightflag=0,date=None,time=None,sig=None)->dict:\n",
    "    url = 'https://restapi.amap.com/v3/direction/transit/integrated?parameters'\n",
    "    params={\n",
    "        'key':key_xu,\n",
    "        'origin':origin,\n",
    "        'destination':destination,\n",
    "        'city':city,\n",
    "        'cityd':cityd,\n",
    "        'extensions':extensions,\n",
    "        'strategy':strategy,\n",
    "        'nightflag':nightflag,\n",
    "        'date':date,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data\n",
    "\n",
    "# C-2 准备walking 参数\n",
    "中山大学 = geocode('广东省广州市中山大学南校区')\n",
    "中山大学_location = 中山大学['geocodes'][0]['location']\n",
    "天河城 = geocode('广东省广州市天河城')\n",
    "天河城_location = 天河城['geocodes'][0]['location']\n",
    "print(\"(起点)中山大学_location:\",中山大学_location,\"(终点)天河城_location:\",天河城_location)\n",
    "\n",
    "# C-3 公交路径规划\n",
    "中大_天河城 = integrated(中山大学_location,天河城_location,city='广州',extensions='all')\n",
    "df_bus = pd.json_normalize(中大_天河城)\n",
    "df_bus"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cost</th>\n",
       "      <th>duration</th>\n",
       "      <th>nightflag</th>\n",
       "      <th>walking_distance</th>\n",
       "      <th>distance</th>\n",
       "      <th>missed</th>\n",
       "      <th>segments</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2443</td>\n",
       "      <td>0</td>\n",
       "      <td>1690</td>\n",
       "      <td>10345</td>\n",
       "      <td>0</td>\n",
       "      <td>[{'taxi': [], 'walking': {'origin': '113.29036...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2853</td>\n",
       "      <td>0</td>\n",
       "      <td>1060</td>\n",
       "      <td>7996</td>\n",
       "      <td>0</td>\n",
       "      <td>[{'taxi': [], 'walking': {'origin': '113.29036...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.0</td>\n",
       "      <td>3019</td>\n",
       "      <td>0</td>\n",
       "      <td>979</td>\n",
       "      <td>8224</td>\n",
       "      <td>0</td>\n",
       "      <td>[{'taxi': [], 'walking': {'origin': '113.29036...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.0</td>\n",
       "      <td>3173</td>\n",
       "      <td>0</td>\n",
       "      <td>965</td>\n",
       "      <td>8551</td>\n",
       "      <td>0</td>\n",
       "      <td>[{'taxi': [], 'walking': {'origin': '113.29036...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2375</td>\n",
       "      <td>0</td>\n",
       "      <td>1138</td>\n",
       "      <td>7823</td>\n",
       "      <td>1</td>\n",
       "      <td>[{'taxi': [], 'walking': {'origin': '113.29036...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  cost duration nightflag walking_distance distance missed  \\\n",
       "0  4.0     2443         0             1690    10345      0   \n",
       "1  2.0     2853         0             1060     7996      0   \n",
       "2  2.0     3019         0              979     8224      0   \n",
       "3  2.0     3173         0              965     8551      0   \n",
       "4  2.0     2375         0             1138     7823      1   \n",
       "\n",
       "                                            segments  \n",
       "0  [{'taxi': [], 'walking': {'origin': '113.29036...  \n",
       "1  [{'taxi': [], 'walking': {'origin': '113.29036...  \n",
       "2  [{'taxi': [], 'walking': {'origin': '113.29036...  \n",
       "3  [{'taxi': [], 'walking': {'origin': '113.29036...  \n",
       "4  [{'taxi': [], 'walking': {'origin': '113.29036...  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.json_normalize(中大_天河城[\"route\"]['transits'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>taxi</th>\n",
       "      <th>exit</th>\n",
       "      <th>walking.origin</th>\n",
       "      <th>walking.destination</th>\n",
       "      <th>walking.distance</th>\n",
       "      <th>walking.duration</th>\n",
       "      <th>walking.steps</th>\n",
       "      <th>bus.buslines</th>\n",
       "      <th>entrance.name</th>\n",
       "      <th>entrance.location</th>\n",
       "      <th>railway.via_stops</th>\n",
       "      <th>railway.alters</th>\n",
       "      <th>railway.spaces</th>\n",
       "      <th>walking</th>\n",
       "      <th>entrance</th>\n",
       "      <th>exit.name</th>\n",
       "      <th>exit.location</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>113.290367,23.128555</td>\n",
       "      <td>113.296722,23.134483</td>\n",
       "      <td>1274</td>\n",
       "      <td>1092</td>\n",
       "      <td>[{'instruction': '沿岭南路步行139米右转', 'road': '岭南路'...</td>\n",
       "      <td>[{'departure_stop': {'name': '区庄', 'id': '4401...</td>\n",
       "      <td>E口</td>\n",
       "      <td>113.296318,23.134756</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[]</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[{'departure_stop': {'name': '员村', 'id': '9000...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>F口</td>\n",
       "      <td>113.362473,23.124685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>113.362877,23.125317</td>\n",
       "      <td>113.361488,23.124657</td>\n",
       "      <td>415</td>\n",
       "      <td>355</td>\n",
       "      <td>[{'instruction': '步行195米左转', 'road': [], 'dist...</td>\n",
       "      <td>[]</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>[]</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  taxi exit        walking.origin   walking.destination walking.distance  \\\n",
       "0   []   []  113.290367,23.128555  113.296722,23.134483             1274   \n",
       "1   []  NaN                   NaN                   NaN              NaN   \n",
       "2   []   []  113.362877,23.125317  113.361488,23.124657              415   \n",
       "\n",
       "  walking.duration                                      walking.steps  \\\n",
       "0             1092  [{'instruction': '沿岭南路步行139米右转', 'road': '岭南路'...   \n",
       "1              NaN                                                NaN   \n",
       "2              355  [{'instruction': '步行195米左转', 'road': [], 'dist...   \n",
       "\n",
       "                                        bus.buslines entrance.name  \\\n",
       "0  [{'departure_stop': {'name': '区庄', 'id': '4401...            E口   \n",
       "1  [{'departure_stop': {'name': '员村', 'id': '9000...           NaN   \n",
       "2                                                 []           NaN   \n",
       "\n",
       "      entrance.location railway.via_stops railway.alters railway.spaces  \\\n",
       "0  113.296318,23.134756                []             []             []   \n",
       "1                   NaN                []             []             []   \n",
       "2                   NaN                []             []             []   \n",
       "\n",
       "  walking entrance exit.name         exit.location  \n",
       "0     NaN      NaN       NaN                   NaN  \n",
       "1      []       []        F口  113.362473,23.124685  \n",
       "2     NaN       []       NaN                   NaN  "
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.json_normalize(中大_天河城[\"route\"]['transits'][0]['segments'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>id</th>\n",
       "      <th>type</th>\n",
       "      <th>distance</th>\n",
       "      <th>duration</th>\n",
       "      <th>polyline</th>\n",
       "      <th>bustimetag</th>\n",
       "      <th>start_time</th>\n",
       "      <th>end_time</th>\n",
       "      <th>via_num</th>\n",
       "      <th>via_stops</th>\n",
       "      <th>departure_stop.name</th>\n",
       "      <th>departure_stop.id</th>\n",
       "      <th>departure_stop.location</th>\n",
       "      <th>arrival_stop.name</th>\n",
       "      <th>arrival_stop.id</th>\n",
       "      <th>arrival_stop.location</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>地铁5号线(滘口--文冲)</td>\n",
       "      <td>440100023037</td>\n",
       "      <td>地铁线路</td>\n",
       "      <td>7660</td>\n",
       "      <td>876</td>\n",
       "      <td>113.296725,23.134483;113.297627,23.134484;113....</td>\n",
       "      <td>0</td>\n",
       "      <td>0615</td>\n",
       "      <td>2315</td>\n",
       "      <td>6</td>\n",
       "      <td>[{'name': '动物园', 'id': '440100023037011', 'loc...</td>\n",
       "      <td>区庄</td>\n",
       "      <td>440100023037010</td>\n",
       "      <td>113.296725,23.134483</td>\n",
       "      <td>员村</td>\n",
       "      <td>440100023037017</td>\n",
       "      <td>113.363663,23.115768</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            name            id  type distance duration  \\\n",
       "0  地铁5号线(滘口--文冲)  440100023037  地铁线路     7660      876   \n",
       "\n",
       "                                            polyline bustimetag start_time  \\\n",
       "0  113.296725,23.134483;113.297627,23.134484;113....          0       0615   \n",
       "\n",
       "  end_time via_num                                          via_stops  \\\n",
       "0     2315       6  [{'name': '动物园', 'id': '440100023037011', 'loc...   \n",
       "\n",
       "  departure_stop.name departure_stop.id departure_stop.location  \\\n",
       "0                  区庄   440100023037010    113.296725,23.134483   \n",
       "\n",
       "  arrival_stop.name  arrival_stop.id arrival_stop.location  \n",
       "0                员村  440100023037017  113.363663,23.115768  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_bus_基本信息 = pd.json_normalize(中大_天河城[\"route\"]['transits'][0]['segments'][0]['bus'][\"buslines\"])\n",
    "df_bus_基本信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "ename": "IndexError",
     "evalue": "list index out of range",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-27-66d9e9090688>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# C-4 公交车信息处理结果\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[0m_23路公交车\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjson_normalize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m中大_天河城\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"route\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'transits'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'segments'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'bus'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"buslines\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"via_stops\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrename\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m{\u001b[0m\u001b[1;34m\"name\"\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;34m\"_23路公交车\"\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0m_284路公交车\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjson_normalize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m中大_天河城\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"route\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'transits'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'segments'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'bus'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"buslines\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"via_stops\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrename\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m{\u001b[0m\u001b[1;34m\"name\"\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;34m\"_284路公交车\"\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      4\u001b[0m \u001b[0m_518路公交车\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjson_normalize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m中大_天河城\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"route\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'transits'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'segments'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'bus'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"buslines\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"via_stops\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrename\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m{\u001b[0m\u001b[1;34m\"name\"\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;34m\"_518路公交车\"\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_23路公交车\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0m_284路公交车\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0m_518路公交车\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mIndexError\u001b[0m: list index out of range"
     ]
    }
   ],
   "source": [
    "# C-4 公交车信息处理结果\n",
    "_23路公交车 = pd.json_normalize(中大_天河城[\"route\"]['transits'][0]['segments'][0]['bus'][\"buslines\"][0][\"via_stops\"]).rename(columns={\"name\":\"_23路公交车\"})\n",
    "_284路公交车 = pd.json_normalize(中大_天河城[\"route\"]['transits'][0]['segments'][0]['bus'][\"buslines\"][1][\"via_stops\"]).rename(columns={\"name\":\"_284路公交车\"})\n",
    "_518路公交车 = pd.json_normalize(中大_天河城[\"route\"]['transits'][0]['segments'][0]['bus'][\"buslines\"][2][\"via_stops\"]).rename(columns={\"name\":\"_518路公交车\"})\n",
    "display(_23路公交车,_284路公交车,_518路公交车)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 行政区域查询（代码D）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>citycode</th>\n",
       "      <th>adcode</th>\n",
       "      <th>name</th>\n",
       "      <th>center</th>\n",
       "      <th>level</th>\n",
       "      <th>districts</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0758</td>\n",
       "      <td>441200</td>\n",
       "      <td>肇庆市</td>\n",
       "      <td>112.472529,23.051546</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0758', 'adcode': '441224', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0757</td>\n",
       "      <td>440600</td>\n",
       "      <td>佛山市</td>\n",
       "      <td>113.122717,23.028762</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0757', 'adcode': '440607', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0754</td>\n",
       "      <td>440500</td>\n",
       "      <td>汕头市</td>\n",
       "      <td>116.708463,23.37102</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0754', 'adcode': '440513', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0752</td>\n",
       "      <td>441300</td>\n",
       "      <td>惠州市</td>\n",
       "      <td>114.412599,23.079404</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0752', 'adcode': '441324', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0755</td>\n",
       "      <td>440300</td>\n",
       "      <td>深圳市</td>\n",
       "      <td>114.085947,22.547</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0755', 'adcode': '440306', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0756</td>\n",
       "      <td>440400</td>\n",
       "      <td>珠海市</td>\n",
       "      <td>113.553986,22.224979</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0756', 'adcode': '440402', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0759</td>\n",
       "      <td>440800</td>\n",
       "      <td>湛江市</td>\n",
       "      <td>110.364977,21.274898</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0759', 'adcode': '440883', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0662</td>\n",
       "      <td>441700</td>\n",
       "      <td>阳江市</td>\n",
       "      <td>111.975107,21.859222</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0662', 'adcode': '441781', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0660</td>\n",
       "      <td>441500</td>\n",
       "      <td>汕尾市</td>\n",
       "      <td>115.364238,22.774485</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0660', 'adcode': '441523', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0768</td>\n",
       "      <td>445100</td>\n",
       "      <td>潮州市</td>\n",
       "      <td>116.632301,23.661701</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0768', 'adcode': '445122', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0750</td>\n",
       "      <td>440700</td>\n",
       "      <td>江门市</td>\n",
       "      <td>113.094942,22.590431</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0750', 'adcode': '440784', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0766</td>\n",
       "      <td>445300</td>\n",
       "      <td>云浮市</td>\n",
       "      <td>112.044439,22.929801</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0766', 'adcode': '445322', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0767</td>\n",
       "      <td>442100</td>\n",
       "      <td>东沙群岛</td>\n",
       "      <td>116.887312,20.617512</td>\n",
       "      <td>city</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0668</td>\n",
       "      <td>440900</td>\n",
       "      <td>茂名市</td>\n",
       "      <td>110.919229,21.659751</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0668', 'adcode': '440983', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0762</td>\n",
       "      <td>441600</td>\n",
       "      <td>河源市</td>\n",
       "      <td>114.697802,23.746266</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0762', 'adcode': '441622', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0753</td>\n",
       "      <td>441400</td>\n",
       "      <td>梅州市</td>\n",
       "      <td>116.117582,24.299112</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0753', 'adcode': '441427', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0769</td>\n",
       "      <td>441900</td>\n",
       "      <td>东莞市</td>\n",
       "      <td>113.746262,23.046237</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0769', 'adcode': '441900', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0663</td>\n",
       "      <td>445200</td>\n",
       "      <td>揭阳市</td>\n",
       "      <td>116.355733,23.543778</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0663', 'adcode': '445222', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0763</td>\n",
       "      <td>441800</td>\n",
       "      <td>清远市</td>\n",
       "      <td>113.051227,23.685022</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0763', 'adcode': '441882', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0751</td>\n",
       "      <td>440200</td>\n",
       "      <td>韶关市</td>\n",
       "      <td>113.591544,24.801322</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0751', 'adcode': '440282', 'nam...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>020</td>\n",
       "      <td>440100</td>\n",
       "      <td>广州市</td>\n",
       "      <td>113.280637,23.125178</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '020', 'adcode': '440117', 'name...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0760</td>\n",
       "      <td>442000</td>\n",
       "      <td>中山市</td>\n",
       "      <td>113.382391,22.521113</td>\n",
       "      <td>city</td>\n",
       "      <td>[{'citycode': '0760', 'adcode': '442000', 'nam...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   citycode  adcode  name                center level  \\\n",
       "0      0758  441200   肇庆市  112.472529,23.051546  city   \n",
       "1      0757  440600   佛山市  113.122717,23.028762  city   \n",
       "2      0754  440500   汕头市   116.708463,23.37102  city   \n",
       "3      0752  441300   惠州市  114.412599,23.079404  city   \n",
       "4      0755  440300   深圳市     114.085947,22.547  city   \n",
       "5      0756  440400   珠海市  113.553986,22.224979  city   \n",
       "6      0759  440800   湛江市  110.364977,21.274898  city   \n",
       "7      0662  441700   阳江市  111.975107,21.859222  city   \n",
       "8      0660  441500   汕尾市  115.364238,22.774485  city   \n",
       "9      0768  445100   潮州市  116.632301,23.661701  city   \n",
       "10     0750  440700   江门市  113.094942,22.590431  city   \n",
       "11     0766  445300   云浮市  112.044439,22.929801  city   \n",
       "12     0767  442100  东沙群岛  116.887312,20.617512  city   \n",
       "13     0668  440900   茂名市  110.919229,21.659751  city   \n",
       "14     0762  441600   河源市  114.697802,23.746266  city   \n",
       "15     0753  441400   梅州市  116.117582,24.299112  city   \n",
       "16     0769  441900   东莞市  113.746262,23.046237  city   \n",
       "17     0663  445200   揭阳市  116.355733,23.543778  city   \n",
       "18     0763  441800   清远市  113.051227,23.685022  city   \n",
       "19     0751  440200   韶关市  113.591544,24.801322  city   \n",
       "20      020  440100   广州市  113.280637,23.125178  city   \n",
       "21     0760  442000   中山市  113.382391,22.521113  city   \n",
       "\n",
       "                                            districts  \n",
       "0   [{'citycode': '0758', 'adcode': '441224', 'nam...  \n",
       "1   [{'citycode': '0757', 'adcode': '440607', 'nam...  \n",
       "2   [{'citycode': '0754', 'adcode': '440513', 'nam...  \n",
       "3   [{'citycode': '0752', 'adcode': '441324', 'nam...  \n",
       "4   [{'citycode': '0755', 'adcode': '440306', 'nam...  \n",
       "5   [{'citycode': '0756', 'adcode': '440402', 'nam...  \n",
       "6   [{'citycode': '0759', 'adcode': '440883', 'nam...  \n",
       "7   [{'citycode': '0662', 'adcode': '441781', 'nam...  \n",
       "8   [{'citycode': '0660', 'adcode': '441523', 'nam...  \n",
       "9   [{'citycode': '0768', 'adcode': '445122', 'nam...  \n",
       "10  [{'citycode': '0750', 'adcode': '440784', 'nam...  \n",
       "11  [{'citycode': '0766', 'adcode': '445322', 'nam...  \n",
       "12                                                 []  \n",
       "13  [{'citycode': '0668', 'adcode': '440983', 'nam...  \n",
       "14  [{'citycode': '0762', 'adcode': '441622', 'nam...  \n",
       "15  [{'citycode': '0753', 'adcode': '441427', 'nam...  \n",
       "16  [{'citycode': '0769', 'adcode': '441900', 'nam...  \n",
       "17  [{'citycode': '0663', 'adcode': '445222', 'nam...  \n",
       "18  [{'citycode': '0763', 'adcode': '441882', 'nam...  \n",
       "19  [{'citycode': '0751', 'adcode': '440282', 'nam...  \n",
       "20  [{'citycode': '020', 'adcode': '440117', 'name...  \n",
       "21  [{'citycode': '0760', 'adcode': '442000', 'nam...  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>citycode</th>\n",
       "      <th>adcode</th>\n",
       "      <th>name</th>\n",
       "      <th>center</th>\n",
       "      <th>level</th>\n",
       "      <th>districts</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0752</td>\n",
       "      <td>441324</td>\n",
       "      <td>龙门县</td>\n",
       "      <td>114.259986,23.723894</td>\n",
       "      <td>district</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0752</td>\n",
       "      <td>441322</td>\n",
       "      <td>博罗县</td>\n",
       "      <td>114.284254,23.167575</td>\n",
       "      <td>district</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0752</td>\n",
       "      <td>441323</td>\n",
       "      <td>惠东县</td>\n",
       "      <td>114.723092,22.983036</td>\n",
       "      <td>district</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0752</td>\n",
       "      <td>441303</td>\n",
       "      <td>惠阳区</td>\n",
       "      <td>114.469444,22.78851</td>\n",
       "      <td>district</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0752</td>\n",
       "      <td>441302</td>\n",
       "      <td>惠城区</td>\n",
       "      <td>114.413978,23.079883</td>\n",
       "      <td>district</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  citycode  adcode name                center     level districts\n",
       "0     0752  441324  龙门县  114.259986,23.723894  district        []\n",
       "1     0752  441322  博罗县  114.284254,23.167575  district        []\n",
       "2     0752  441323  惠东县  114.723092,22.983036  district        []\n",
       "3     0752  441303  惠阳区   114.469444,22.78851  district        []\n",
       "4     0752  441302  惠城区  114.413978,23.079883  district        []"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# D-1 请注意行政区域级别划分参数\n",
    "def district(keywords,subdistrict=None,page=None,offset=None,extensions='base',filter=None,)->dict:\n",
    "    url = 'https://restapi.amap.com/v3/config/district?parameters'\n",
    "    params={\n",
    "        'key':key_xu,\n",
    "        'keywords':keywords,\n",
    "        'subdistrict':subdistrict,\n",
    "        'page':page,\n",
    "        'offset':offset,\n",
    "        'extensions':extensions,\n",
    "        'filter':filter,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data\n",
    "行政区域 = district(keywords='广东',extensions='all',subdistrict=2)\n",
    "\n",
    "df_行政区域_1级 = pd.json_normalize(行政区域[\"districts\"][0]['districts'])\n",
    "\n",
    "df_行政区域_2级_惠州市 = pd.json_normalize(行政区域[\"districts\"][0]['districts'][3]['districts'])\n",
    "display(df_行政区域_1级,df_行政区域_2级_惠州市)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'df_行政区域_2级' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-35-5451cbce8a83>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# D-2 2级区域地址\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdf_行政区域_2级\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'df_行政区域_2级' is not defined"
     ]
    }
   ],
   "source": [
    "# D-2 2级区域地址\n",
    "df_行政区域_2级"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 搜索POI"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 关键字搜索（代码E）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# E-1\n",
    "def place_text(keywords,types,city=None,citylimit=None,children=None,page=None,extensions='base',sig=None)->dict:\n",
    "    url = 'https://restapi.amap.com/v3/place/text?parameters'\n",
    "    params={\n",
    "        'key':key_xu,\n",
    "        'keywords':keywords,\n",
    "        'types':types,\n",
    "        'city':city,\n",
    "        'citylimit':citylimit,\n",
    "        'children':children,\n",
    "        'page':page,\n",
    "        'extensions':extensions,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data\n",
    "\n",
    "广州_大学 = place_text('大学','高等院校',city=\"广州市\",children=1,extensions='all')\n",
    "广州_大学\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_广州_大学 = pd.json_normalize(广州_大学[\"pois\"])\n",
    "df_广州_大学_广东技术师范大学 = pd.json_normalize(广州_大学[\"pois\"][7][\"children\"])\n",
    "display(df_广州_大学,df_广州_大学_广东技术师范大学)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 周边搜索 (代码F)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# F-1 \n",
    "def place_around(location,keywords=None,types=None,city=None,redius=None,sortrule=None,offset=None,page=None,extensions='base',sig=None)->dict:\n",
    "    url = 'https://restapi.amap.com/v3/place/around?parameters'\n",
    "    params={\n",
    "        'key':key_xu,\n",
    "        'keywords':keywords,\n",
    "        'location':location,\n",
    "        'types':types,\n",
    "        'city':city,\n",
    "        'redius':redius,\n",
    "        'sortrule':sortrule,\n",
    "        'offset':offset,\n",
    "        'page':page,\n",
    "        'extensions':extensions,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = response.json()\n",
    "    return data\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# F-2 json信息\n",
    "中山大学_周边POI = place_around(中山大学_location)\n",
    "中山大学_周边POI"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# F-3 表格化，可扩展pandas处理\n",
    "df_中山大学_周边POI = pd.json_normalize(中山大学_周边POI['pois'])\n",
    "df_中山大学_周边POI"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多边形搜索 （学生练习）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 静态地图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'r' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-36-0db5d3705ea2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mio\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mBytesIO\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mi\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mImage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBytesIO\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcontent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'r' is not defined"
     ]
    }
   ],
   "source": [
    ">>> from PIL import Image\n",
    ">>> from io import BytesIO\n",
    "\n",
    ">>> i = Image.open(BytesIO(r.content))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "from io import BytesIO\n",
    "def staticmap(location,zoom,size=None,scale=1,markers=None,labels=None,paths=None,traffic=0,page=None,sig=None)->dict:\n",
    "    url = 'https://restapi.amap.com/v3/staticmap?parameters'\n",
    "    params={\n",
    "        'key':key_xu,\n",
    "        'location':location,\n",
    "        'zoom':zoom,\n",
    "        'size':size,\n",
    "        'scale':scale,\n",
    "        'markers':markers,\n",
    "        'labels':labels,\n",
    "        'paths':paths,\n",
    "        'traffic':traffic,\n",
    "        'sig':sig,\n",
    "        'output':'json'\n",
    "    }\n",
    "    response = requests.get(url,params=params)\n",
    "    data = Image.open(BytesIO(response.content))\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<PIL.PngImagePlugin.PngImageFile image mode=P size=400x400 at 0x26014A1C9B0>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "staticmap(location=中大南方_location,zoom=16)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 总结及展望\n",
    "\n",
    "## 对于复杂json\n",
    "\n",
    "对于复杂json，细读API文档和测试尤其关键，可能有些功能是测试完才知道如何实现和体现其价值的\n",
    "\n",
    "## 思考地图POI中的推荐算法工作原理\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "327.391px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
